<?php
namespace app\controller;

use app\BaseController;
use think\facade\Request;
use think\facade\Db;
use think\Exception;
use think\facade\Filesystem;
use think\facade\Log;

class AssetList extends BaseController
{
    //查询资产
    public function get_AssetList()
    {
        $userRoot = $this->request->auth['data']->user->user_root;
        $userId = $this->request->auth['data']->user->user_id;


        // 根据用户ID获取公司ID
        $companyId = Db::name('user')->where('user_id', $userId)->value('user_company_id');


        //查询条件
        $current_page = Request::param('current_page');
        $page_size = Request::param('page_size');

        // 获取搜索表单参数
        $seachform = Request::param('seachform', [], 'trim'); // 使用trim过滤空白字符，并设置默认值为空数组

       // 初始化变量为null或默认值
        $begindate = $enddate = $assets_code = $assets_status = $department_ids = $customer_ids =
        $assets_name = $AssetTypes_ids = $assets_SerialNumber = $assets_brand = $assets_model =
        $assets_source = $assets_PurchasePrice = $supplier_ids = $location_ids = $assets_remark =
        $quick_search =$compare=$branch_id=null;

       // 批量检查参数是否存在
        if (is_array($seachform)) {
            $begindate = $seachform['begindate'] ?? null;//开始日期购买日期
            $enddate = $seachform['enddate'] ?? null;//结束日期购买日期
            $assets_code = $seachform['assets_code'] ?? null;//资产编码
            $assets_status = $seachform['assets_status'] ?? null;//状态
            $department_ids = $seachform['department_ids'] ?? null;//所属部门
            $customer_ids = $seachform['customer_ids'] ?? null;//使用人
            $assets_name = $seachform['assets_name'] ?? null;//资产名称
            $AssetTypes_ids = $seachform['AssetTypes_ids'] ?? null;//资产类型
            $assets_SerialNumber = $seachform['assets_SerialNumber'] ?? null;//序列号
            $assets_brand = $seachform['assets_brand'] ?? null;//品牌
            $assets_model = $seachform['assets_model'] ?? null;//型号
            $assets_source = $seachform['assets_source'] ?? null;//资产来源
            $assets_PurchasePrice = $seachform['assets_PurchasePrice'] ?? null;//采购价格
            $supplier_ids = $seachform['supplier_ids'] ?? null;//供应商
            $location_ids = $seachform['location_ids'] ?? null;//位置
            $assets_remark = $seachform['assets_remark'] ?? null;//备注
            $quick_search = $seachform['quick_search'] ?? null;//快捷搜索
            $branch_id=$seachform['branch_id']?? null;
            $compare=$seachform['compare']?? null;//比较符号
        }
        

        //快捷搜索,需要和其他搜索分开使用
//        $quick_search = Request::param('quick_search');
        if (!empty($quick_search)) {

            // 定义需要处理的字段列表
            $fields = [
                'assets_name', 'AssetTypes_name', 'department_name',
                'customer_name', 'supplier_name', 'location_name',
                'assets_code', 'assets_brand', 'assets_model',
                'assets_SerialNumber', 'assets_remark', 'assets_source',
                'assets_PurchasePrice', 'assets_PurchaseDate','assets_status'
            ];


            // 初始化固定条件
            $fixedConditions = [
                ['assets_company_id', '=', $companyId],
                ['assets_InputStatus', '=', '已审核'],
            ];

            // 根据 $assets_status 是否有值且非空，决定是否添加该条件
            if (!is_null($assets_status) && $assets_status !== '') {
                $fixedConditions[] = ['assets_status', '=', $assets_status];
            }

            // 根据 $branch_id 是否有值且非空（假设它是一个有效的ID，而不是空字符串或其他无效值），决定是否添加该条件
            if (!is_null($branch_id) && $branch_id !== '') { // 这里你可能需要根据你的实际情况来判断 $branch_id 是否有效
                $fixedConditions[] = ['assets_branch_id', '=', $branch_id];
            }


            // 构建查询
            $query = Db::table('vw_assets');

          // 当有快速搜索关键词时，动态添加模糊匹配条件
            if (!empty($quick_search)) {
                // 使用一个大的条件组来确保模糊匹配条件与固定条件之间是AND关系
                $query->where(function ($query) use ($fields, $quick_search) {
                    // 对每个字段添加模糊匹配条件，并通过orWhere连接
                    foreach ($fields as $field) {
                        $query->Whereor($field, 'like', "%{$quick_search}%");
                    }
                });
            }

          // 应用固定筛选条件，这些条件应与模糊匹配条件是AND关系
            foreach ($fixedConditions as $condition) {
                list($field, $operator, $value) = $condition;
                // 注意这里直接在外部条件组内添加，与之前的条件是AND关系
                $query->where($field, $operator, $value);
            }

          // 排序与分页处理
            $query->order('assets_id', 'desc')
                ->page($current_page, $page_size);

           // 获取数据
            $data = $query->select();

         // 计算总条数
            $total_count = clone $query;
            $total_count = $total_count->count();

            return json(['code' => 200, 'data' => $data, 'total' => $total_count]);
        }


        // 构建查询条件
        $where = [];

        // 根据传入的参数动态构建查询条件
        if ($begindate && $enddate) {
            // 设置开始日期的时分秒为00:00:00
            $startOfDay = date('Y-m-d 00:00:00', strtotime($begindate));
            // 设置结束日期的时分秒为23:59:59（或者你也可以选择结束日期的次日00:00:00来简化比较）
            $endOfDay = date('Y-m-d 23:59:59', strtotime($enddate));

            // 使用范围查询
            $where[] = ['assets_PurchaseDate', '>=', $startOfDay];
            $where[] = ['assets_PurchaseDate', '<=', $endOfDay];
        }


        // 处理资产编码的模糊查询
        if (!empty($assets_code)) {
            $where[] = ['assets_code', 'like', '%' . $assets_code . '%'];
        }

        if(!empty($branch_id)){
            $where[] = ['assets_branch_id', '=', $branch_id];
        }

        // 处理资产状态的精确查询（如果状态是精确值而不是模糊匹配）
        if (!empty($assets_status)) {
            $where[] = ['assets_status', 'in', $assets_status];
        }

        // 处理资产名称的模糊查询
        if (!empty($assets_name)) {
            $where[] = ['assets_name', 'like', '%' . $assets_name . '%'];
        }

        // 处理资产备注的模糊查询
        if (!empty($assets_remark)) {
            $where[] = ['assets_remark', 'like', '%' . $assets_remark . '%'];
        }

        // 处理资产序列号的精确查询（如果序列号是精确值而不是模糊匹配）
        if (!empty($assets_SerialNumber)) {
            $where[] = ['assets_SerialNumber', '=', $assets_SerialNumber];
        }

        // 处理资产品牌的模糊查询
        if (!empty($assets_brand)) {
            $where[] = ['assets_brand', 'like', '%' . $assets_brand . '%'];
        }

        // 处理资产规格的模糊查询
        if (!empty($assets_model)) {
            $where[] = ['assets_model', 'like', '%' . $assets_model . '%'];
        }

        // 处理资产来源的精确查询（如果来源是精确值而不是模糊匹配）
        if (!empty($assets_source)) {
            $where[] = ['assets_source', 'in', $assets_source];
        }

        // 处理部门ID的查询，支持多选
        if (!empty($department_ids) && is_array($department_ids)) {
            $where[] = ['department_id', 'in', $department_ids];
        }

        // 处理使用人ID的查询，支持多选（假设字段名为customer_id）
        if (!empty($customer_ids) && is_array($customer_ids)) {
            $where[] = ['customer_id', 'in', $customer_ids];
        }

        // 处理存放地点的查询，支持多选（假设字段名为storage_location）
        if (!empty($location_ids) && is_array($location_ids)) {
            $where[] = ['location_id', 'in', $location_ids];
        }

        // 处理供应商的查询，支持多选（假设字段名为supplier_name）
        if (!empty($supplier_ids) && is_array($supplier_ids)) {
            $where[] = ['supplier_id', 'in', $supplier_ids];
        }

        // 处理资产类型的查询，支持多选（假设字段名为AssetTypes_id）
        if (!empty($AssetTypes_ids) && is_array($AssetTypes_ids)) {
            $where[] = ['AssetTypes_id', 'in', $AssetTypes_ids];
        }

//        // 假设 $assets_PurchasePrice 是一个字符串，格式为 "operator_value"，例如 ">_1000" 表示大于 1000
//        $priceCompare = null; // 存储比较操作符
//        $priceValue = 0; // 存储价格值

        if (!empty($assets_PurchasePrice) && $compare !== null) {
            $where[] = ['assets_PurchasePrice', $compare, $assets_PurchasePrice]; // 假设购买价格字段名为 purchase_price
        }


//// 如果设置了价格比较逻辑，则将其添加到查询条件数组中
//        if ($priceCompare !== null) {
//            $where[] = ['purchase_price', $priceCompare, $priceValue]; // 假设购买价格字段名为 purchase_price
//        }


        // 执行查询
        $assetList = Db::table('vw_assets')
            ->where($where)
            ->where('assets_company_id', $companyId)
            ->where('assets_InputStatus','已审核')
            ->order('assets_id', 'desc') // 假设按照购买日期降序排列
            ->page($current_page, $page_size)
            ->select();
        //获取总记录数
        $total = Db::table('vw_assets')
            ->where($where)
            ->where('assets_company_id', $companyId)
            ->where('assets_InputStatus','已审核')
            ->count();

// 处理查询结果并返回
        if ($assetList) {
            // 对$assetList进行进一步处理，如格式化数据等
            // ...
            return json(['code' => 200, 'msg' => '查询成功', 'data' => $assetList,'total'=>$total]);
        } else {
            return json(['code' => 404, 'msg' => '未找到相关资产', 'data' => []]);
        }

    }

    //根据资产id查询资产历史记录
    public function getAssetHistory()
    {

        $userRoot = $this->request->auth['data']->user->user_root;
        $userId = $this->request->auth['data']->user->user_id;


        // 根据用户ID获取公司ID
        $companyId = Db::name('user')->where('user_id', $userId)->value('user_company_id');

        $assetId = Request::param('assetId');

        //检查参数是否合法
        if (empty($assetId)) {
            return json(['code' => 400, 'msg' => '参数错误']);
        }

        $assetHistory = Db::table('vw_AssetHistories')
            ->where('AssetHistories_assets_id', $assetId)
            ->where('AssetHistories_company_id', $companyId)
            ->select()->toArray();

        foreach ($assetHistory as $key => &$value) {

//            if($value['AssetHistories_type']=='入库'){
//                //找查入库单单据号
//                $instockbill = Db::table('instock')->where('instock_id',$value['AssetHistories_bill_id'])->value('instock_BillNumber');
//                $value['AssetHistories_bill']=$instockbill;
//
//            }else if($value['AssetHistories_type']=='领用'){
//                $AssetUseBill=Db::table('AssetUseBill')->where('AssetUseBill_id',$value['AssetHistories_bill_id'])->value('AssetUseBill_BillNumber');
//                $value['AssetHistories_bill']=$AssetUseBill;
//            }
            switch ($value['AssetHistories_type']) {
                case '入库':
                    // 查找入库单单据号
                    $billnumber=$value['AssetHistories_bill'] = Db::table('instock')
                        ->where('instock_id', $value['AssetHistories_bill_id'])
                        ->value('instock_BillNumber');
                    $value['AssetHistories_bill']=$billnumber;
                    break;
                case '领用':
                    // 查找领用单单据号
                    $billnumber=$value['AssetHistories_bill'] = Db::table('AssetUseBill')
                        ->where('AssetUseBill_id', $value['AssetHistories_bill_id'])
                        ->value('AssetUseBill_BillNumber');
                    $value['AssetHistories_bill']=$billnumber;
                    break;
                case '退库':
                    // 查找退库单单据号
                    $billnumber=$value['AssetHistories_bill'] = Db::table('AssetReturnsBill')
                        ->where('AssetReturnsBill_id', $value['AssetHistories_bill_id'])
                        ->value('AssetReturnsBill_BillNumber');
                    $value['AssetHistories_bill']=$billnumber;
                    break;
                case '信息修改':
                    $billnumber=$value['AssetHistories_bill'] = Db::table('InfoUpdateBill')
                        ->where('InfoUpdateBill_id', $value['AssetHistories_bill_id'])
                        ->value('InfoUpdateBill_BillNumber');
                    $value['AssetHistories_bill']=$billnumber;

            }

        }
        //json返回结果
        if ($assetHistory) {
            return json(['code' => 200, 'msg' => '查询成功', 'data' => $assetHistory]);
        } else {
            return json(['code' => 200, 'msg' => '未找到相关资产', 'data' => []]);
        }

    }

    //根据资产id查询资产
    public function getAssetById()
    {
        $userRoot = $this->request->auth['data']->user->user_root;
        $userId = $this->request->auth['data']->user->user_id;

        // 根据用户ID获取公司ID
        $companyId = Db::name('user')->where('user_id', $userId)->value('user_company_id');

        $assetId = Request::param('assetId');

        if (empty($assetId)) {
            return json(['code' => 400, 'msg' => '参数错误']);
        }
        $asset = Db::table('vw_assets')
            ->where('assets_id', $assetId)
            ->where('assets_company_id', $companyId)
            ->where('assets_InputStatus','已审核')
            ->find();
        if ($asset) {
            return json(['code' => 200, 'msg' => '查询成功', 'data' => $asset]);
        } else {
            return json(['code' => 201, 'msg' => '未找到相关资产', 'data' => []]);
        }

    }
    //根据资产id和资产编码查询资产,主要用于扫描二维码查询
    public function getAssetByAssetCode()
    {

        $assetId = Request::param('assets_id');
        $assets_code=Request::param('assets_code');

        if (empty($assetId)) {
            return json(['code' => 400, 'msg' => '参数错误']);
        }
        if (empty($assets_code)) {
            return json(['code' => 400, 'msg' => '参数错误']);
        }

        $asset = Db::table('vw_assets')
            ->where('assets_id', $assetId)
            ->where('assets_code',$assets_code)
            ->where('assets_InputStatus','已审核')
            ->find();
        if ($asset) {
            return json(['code' => 200, 'msg' => '查询成功', 'data' => $asset]);
        } else {
            return json(['code' => 201, 'msg' => '未找到相关资产', 'data' => []]);
        }


    }

}